package com.yanfan.iot.tdengine.dao;

import com.yanfan.iot.domain.Device;
import com.yanfan.iot.domain.DeviceLog;
import com.yanfan.iot.model.HistoryModel;
import com.yanfan.iot.model.MonitorModel;
import com.yanfan.iot.model.ThingsModelLogCountVO;
import com.yanfan.iot.model.param.DataCenterParam;
import com.yanfan.iot.tdengine.service.model.TdLogDto;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @package com.yanfan.mysql.mysql.tdengine
 * 类名: DatabaseMapper
 * 时间: 2022/5/16,0016 1:27
 * 开发人: wxy
 */
public interface TDDeviceLogDao {

    /***
     * 创建超级表 DeviceLog
     */
    int createSTable(String database);

    /***
     * 新增设备日志
     */
    int save(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    /**
     * 批量插入数据
     *
     * @param database 数据库名
     * @param list     list集合
     */
    int saveBatch(@Param("database") String database, @Param("data") TdLogDto data);

    /***
     * 设备属性数据总数
     */
    Long selectPropertyLogCount(@Param("database") String database, @Param("device") Device device);

    /***
     * 设备功能数据总数
     */
    Long selectFunctionLogCount(@Param("database") String database, @Param("device") Device device);

    /***
     * 设备事件数据总数
     */
    Long selectEventLogCount(@Param("database") String database, @Param("device") Device device);

    /***
     * 设备监测数据总数
     */
    Long selectMonitorLogCount(@Param("database") String database, @Param("device") Device device);

    /***
     * 监测数据列表
     */
    List<MonitorModel> selectMonitorList(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    /***
     * 日志列表
     */
    List<DeviceLog> selectDeviceLogList(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    /***
     * 根据设备ID删除设备日志
     */
    int deleteDeviceLogByDeviceNumber(@Param("database") String dbName, @Param("serialNumber") String serialNumber);

    /***
     * 历史数据列表
     */
    List<HistoryModel> selectHistoryList(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    /**
     * 删除对应的ts数据
     */
    int deleteByHistoryList(@Param("database") String database, @Param("ts") Date ts, @Param("identity") String identity);

    int updateByHistoryList(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    List<HistoryModel> listHistory(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    List<HistoryModel> listhistoryGroupByCreateTime(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    /**
     * 场景统计变量历史值
     *
     * @param deviceLog 实体类
     * @return java.lang.String
     */
    List<String> selectStatsValue(@Param("database") String database, @Param("device") DeviceLog deviceLog);

    /**
     * 统计设备物模型指令下发数量
     *
     * @param dataCenterParam 传参
     * @return com.yanfan.common.core.domain.AjaxResult
     */
    List<ThingsModelLogCountVO> countThingsModelInvoke(@Param("database") String database, @Param("dataCenterParam") DataCenterParam dataCenterParam);

    /**
     * 查询设备日志统计
     *
     * @param database 数据库名
     * @return 结果
     */
    Map<String, String> selectDeviceLogYesterdayCount(@Param("database") String database);

    /**
     * 查询设备日志总数
     *
     * @return 结果
     */
    Map<String, String> selectDeviceLogTotalCount(String dbName);

    /**
     * 查询设备消息最近1小时统计信息
     *
     * @return 结果
     */
    List<Map<String, String>> selectDeviceLogAnHourCount(@Param("database") String database);

    /**
     * 查询设备消息最近24小时统计信息
     *
     * @return 结果
     */
    List<Map<String, String>> selectDeviceLogHourCount(String database);

    /**
     * 查询设备消息最近一周统计信息
     *
     * @return 结果
     */
    List<Map<String, String>> selectDeviceLogWeekCount(String database);

    /**
     * 根据时间范围查询设备消息统计信息
     *
     * @return 结果
     */
    List<Map<String, String>> selectDeviceLogTimeHorizonCount(@Param("database") String dbName, @Param("queryMap") Map<String, String> queryMap);

    HistoryModel selectDashBoardHistory(@Param("database") String dbName, @Param("deviceLog") DeviceLog deviceLog);

    /**
     * 查询时序数据的年月日
     */
    List<HistoryModel> selectDashBoardHistorys(@Param("database") String dbName, @Param("device") DeviceLog device);
}
